home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / Tools / glimpse-2.1 / index / glimpse.h < prev    next >
C/C++ Source or Header  |  1995-05-16  |  7KB  |  157 lines

  1. /* Copyright (c) 1994 Sun Wu, Udi Manber, Burra Gopal.  All Rights Reserved. */
  2. /* ./glimpse/index/pirs.h */
  3. #include <stdio.h>
  4. #include <string.h>
  5. #include <sys/types.h>
  6. /*#include <sys/uio.h>*/
  7. #include <sys/types.h>
  8. #include <sys/stat.h>
  9. #include <unistd.h>
  10. #include <fcntl.h>
  11. #undef log
  12. #include "agrep.h"
  13.  
  14. #ifndef ON
  15. #define ON        1
  16. #endif
  17. #ifndef OFF
  18. #define OFF        0
  19. #endif
  20. #ifndef CHAR
  21. #define CHAR         unsigned char
  22. #endif
  23. #define MAX_INCLUSIVE    256    /* max number of inclusive patterns for
  24.                    files to be indexed even if filetype.c
  25.                    says otherwise. */
  26. #define MAX_EXCLUSIVE    256     /* max number of exclusive patterns 
  27.                    for not_to_be_indexed files  */
  28. #define MAX_FILTER    256    /* max number of filter patterns */
  29. #define I_THRESHOLD    40000    /* 100000 originally, debugging 10000 */
  30. #define MAX_LIST    0177777
  31. #define DEFAULT_PART_SIZE (1 << 13)
  32. #define MAX_64K_HASH    0177777
  33. #define MAX_4K_HASH    4096
  34.  
  35. #define DISKBLOCKSIZE    8192
  36. #define BLOCK_SIZE    (1024*1024)
  37. #define MAX_PARTITION    255
  38. #define MaxNumPartition    250     /* it's not 255, since there is fragmentation*/
  39.  
  40. /* The idea behind our encoding is: dividend = divisor * quotient + remainder */
  41. #define MaxNum4bPartition (16 -  2)    /* since 10 and 0 can't be in LSB/MSB */
  42. #define MaxNum8bPartition (256 - 2)
  43. #define MaxNum12bPartition (MaxNum4bPartition*MaxNum8bPartition)
  44. #define MaxNum16bPartition (MaxNum8bPartition*MaxNum8bPartition)
  45. #define MaxNum24bPartition (MaxNum8bPartition*MaxNum16bPartition)
  46. #define MaxNum32bPartition (MaxNum8bPartition*MaxNum24bPartition)
  47.  
  48. /* These help in encoding byte-level indices: 1st byte's top 2 bits tell the #of bytes - 1 in offset-difference encoding; offset-diff 0 => new file follows */
  49. #define MaxNum1BPartition (MaxNum8bPartition & 0x3f)            /* 62: top byte is 0x00 | x % MaxNum8bPartition === x; just encode x */
  50. #define MaxNum2BPartition (MaxNum1BPartition * MaxNum8bPartition)    /* top byte = 0x40 | x / MaxNum8bPartition; rest is x % ~; encode both separately */
  51. #define MaxNum3BPartition (MaxNum1BPartition * MaxNum16bPartition)    /* top byte = 0x80 | x / MaxNum16bPartition; rest is x % ~; encode both separately */
  52. #define MaxNum4BPartition (MaxNum1BPartition * MaxNum24bPartition)    /* top byte = 0xc0 | x / MaxNum24bPartition; rest is x % ~; encode both separately */
  53.  
  54. #define MIN_WORDS        50    /* before we inform abouit numeric words */
  55. #define MAX_SEARCH_PERCENT    20    /* warn user if searching > this % of blocks */
  56. #define DEF_MAX_INDEX_PERCENT    80    /* if word in > 80%, say everywhere for one-file-per-block */
  57. #define DONT_CONFUSE_SORT 1
  58. #define WORD_END_MARK     2
  59. #define ALL_INDEX_MARK    3        /* If this, then word is in > 60% of blocks */
  60. #define ATTR_END_MARK    4        /* After list of attributes before file offset/block numbers */
  61.  
  62. #define MAX_NAME_SIZE   256
  63. #define MAX_NAME_LEN    MAX_NAME_SIZE
  64. #define MaxNameLength    MAX_NAME_SIZE
  65. #define MAX_LINE_SIZE    1024
  66. #define MAX_LINE_LEN    1024
  67. #define MAX_SORTLINE_LEN (MAX_LINE_LEN * 16)    /* Can be ((MaxNum16bPartition*sizeof(int)+MAX_NAME_LEN)*MAX_INDEX_PERCENT/100) in the worst case */
  68. #define MAX_NAME_BUF    256
  69. #define MAX_WORD_SIZE    24    /* w/o '\0' */
  70. #define MAX_WORD_LEN    MAX_WORD_SIZE
  71. #define MAX_WORD_BUF    32
  72. #define MAX_PAT        256  
  73. #define MAXNUM_FILE    MaxNum16bPartition
  74. #define MAX_INDEX_BUF    (MAX_PARTITION + 1 + 2*MAX_WORD_BUF + 2)    /* index line length without OneFilePerBlock */
  75. #define REAL_INDEX_BUF    (MAXNUM_FILE*2  + 2*MAX_WORD_BUF + 2)    /* index line length with OneFilePerBlock */
  76.  
  77. #define DEFAULT_REGION_LIMIT 256    /* default limit for a record: for ByteLevelIndex: pattern is ignored since can't avoid false matches w/o search */
  78. #define MAX_REGION_LIMIT 16384    /* max amount of space I am going allocate for a record bounded by a delimiter */
  79. #define MAX_PER_LINE    (MAX_SORTLINE_LEN / 2)    /* #of words that can occur on one line before we split it up: not implemented at present */
  80. #define DEF_MAX_PER_MB    500    /* Maximum number of times a word should occur in a megabyte before we say its everywhere */
  81. #define DEF_ALL_INDEX    10000    /* Must be < MAX_ALL_INDEX */
  82. #define MAX_ALL_INDEX    (REAL_INDEX_BUF / 2)    /* THIS * 2 must be < REAL_INDEX_BUF to prevent seg-faults! */
  83.  
  84. #define FILESET_SIZE    MAXNUM_FILE    /* used when OneFilePerBlock is ON */
  85. #define FILEMASK_SIZE    (FILESET_SIZE/(8*sizeof(int)) + 4)    /* bit mask of files */
  86. #define REAL_PARTITION    (FILEMASK_SIZE + 4)    /* must be > MAX_PARTITION */
  87. /* block must be in 0..FILESET_SIZE-1, and integers should represent bit-masks */
  88. #define block2index(i)    (i/(8*sizeof(int)))
  89. #define block2mask(i)    (1<<(i%(8*sizeof(int))))    /* not used */
  90. #define round(x, y)    (((x)+(y)-1)/(y))
  91.  
  92. /* Default file names */
  93. #define FILTER_FILE    ".glimpse_filters"
  94. #define ATTRIBUTE_FILE    ".glimpse_attributes"
  95. #define INDEX_FILE    ".glimpse_index"
  96. #define P_TABLE        ".glimpse_partitions"
  97. #define NAME_LIST    ".glimpse_filenames"
  98. #define DEF_LOG_FILE    ".glimpse_log"
  99. #define DEF_MESSAGE_FILE ".glimpse_messages"
  100. #define DEF_STAT_FILE    ".glimpse_statistics"
  101. #define PROHIBIT_LIST    ".glimpse_exclude"
  102. #define INCLUDE_LIST    ".glimpse_include"
  103. #define DEBUG_FILE    ".glimpse_debug"
  104. #define I2        ".glimpse_tmpi2"
  105. #define I3        ".glimpse_tmpi3"
  106. #define I1        ".glimpse_tmpi1"
  107. #define O1        ".glimpse_tmpo1"
  108. #define O2        ".glimpse_tmpo2"
  109. #define O3        ".glimpse_tmpo3"
  110.  
  111. #define MASK_INT \
  112. { 0x00000001, 0x00000002, 0x00000004, 0x00000008, 0x00000010, 0x00000020, 0x00000040, 0x00000080,\
  113.   0x00000100, 0x00000200, 0x00000400, 0x00000800, 0x00001000, 0x00002000, 0x00004000, 0x00008000,\
  114.   0x00010000, 0x00020000, 0x00040000, 0x00080000, 0x00100000, 0x00200000, 0x00400000, 0x00800000,\
  115.   0x01000000, 0x02000000, 0x04000000, 0x08000000, 0x10000000, 0x20000000, 0x40000000, 0x80000000\
  116. }
  117.  
  118. #define IGNORED_SUFFIXES {"gz", "Z", "z", "zip", "o", "hqx", "tar", "glimpse_index", "glimpse_partitions"}
  119. #define NUM_SUFFIXES    9
  120.  
  121. /* Version and release year: same for glimpse and glimspeindex since glimpse HAS to interpret glimpseindex */
  122. #define GLIMPSE_VERSION    "2.1"
  123. #define GLIMPSE_DATE    "1995"
  124. #define GLIMPSE_EMAIL    "glimpse@cs.arizona.edu"
  125.  
  126. /* Some extern functions used in structured queries */
  127. extern int attr_name_to_id(), attr_load_names(), attr_dump_names();
  128. extern char *attr_id_to_name();
  129.  
  130. /* Data structures for hash-tables in build_in.c */
  131. struct  token {            /* each token stores a unique word and unique attribute */    
  132.         struct token *next_t;
  133.     char *word;             
  134.     struct indices *ip;    /* points to the head of the list of indices */
  135.     struct indices *lastip;    /* tail of this list = last elemet (for increasing order insertion) */
  136.     int attribute;
  137.     int totalcount;
  138.         };
  139.  
  140. struct indices {
  141.     struct indices *next_i;     
  142.     unsigned  int count;         
  143.         /*unsigned*/  int index[8];     /* changed from char, 31/3/94 */
  144.     /*unsigned*/  int offset[8];    /* added 19/9/94 */
  145.     };
  146.  
  147. /* Added 20/9/94 for get_index.c in glimpse (make it more efficient in space later) */
  148. struct offsets {
  149.     struct offsets *next;
  150.     int offset;    /* NOT unsigned!!! */
  151.     short    sign;    /* if 0, then indeterminate (bothways), 1 then +ve, -1 then -ve */
  152.     short    done;    /* if 0, then this did not have an intersection now, else it has had it */
  153.     };
  154.  
  155. extern char *my_malloc();
  156. extern int my_free();
  157.